package com.cskaoyan.javase.oop3._2inner._2static._1basic;

/**
 * 首先仍然明确两个原则:
 *      1.好兄弟原则,静态内部类和外围类之间是好兄弟,互相访问不受权限限制
 *      2.静态内部类对象,不会依赖于外围类对象而存,所以:
 *          a.静态内部类的成员方法/静态方法中,如何访问外围类成员?
 *              直接创建外围类对象即可,但是要注意访问不受权限限制.
 *          b.外围类的成员方法/静态方法中,如何访问静态内部类成员?
 *              直接创建静态内部类对象即可,但是要注意访问不受权限限制.
 *
 * 静态内部类的访问特点，主要从以下几个角度研究：
 * 静态内部类内部访问外围类
 * 外围类访问静态内部类成员
 * 外部类访问静态内部类成员
 * 静态内部类访问外部类成员
 * @since 11:12
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        // 在外部类当中创建静态内部类对象
        EnclosedClazz.NestedClazz nc = new EnclosedClazz.NestedClazz();
    }
}

class EnclosedClazz {
    int a;
    private int b = 10;
    static int c = 20;
    static final int D = 30;

    void testMember() {
    }

    static void testStatic2() {
    }

    static class NestedClazz {
        int a;
        private int b = 10;
        static int c = 20;
        static final int D = 30;

        void test() {
            System.out.println(a);
            System.out.println(b);
            System.out.println(c);
            System.out.println(D);
            EnclosedClazz ec = new EnclosedClazz();
            System.out.println(ec.a);
            System.out.println(ec.b);
            System.out.println(EnclosedClazz.c);
            System.out.println(EnclosedClazz.D);
        }

        static void testStatic() {
            NestedClazz nc = new NestedClazz();
            System.out.println(nc.a);
            System.out.println(nc.b);
            EnclosedClazz ec = new EnclosedClazz();
            System.out.println(ec.a);
            System.out.println(ec.b);
            System.out.println(EnclosedClazz.c);
            System.out.println(EnclosedClazz.D);
        }

        public NestedClazz(int a, int b) {
            this.a = a;
            this.b = b;
        }

        public NestedClazz() {
        }

        {
        }

        static {
        }
    }
}